// Package sysin
// @Link  https://github.com/bufanyun/hotgo
// @Copyright  Copyright (c) 2024 HotGo CLI
// @Author  Ms <133814250@qq.com>
// @License  https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.15.7
package sysin

import (
	"context"
	"hotgo/internal/model/entity"
	"hotgo/internal/model/input/form"

	"github.com/gogf/gf/v2/frame/g"
)

// EpCategoryUpdateFields 修改物品分类字段过滤
type EpCategoryUpdateFields struct {
	Title  string `json:"title"  dc:"分类名称"`
	Unit   int    `json:"unit"   dc:"计价类型"`
	Weight string `json:"weight" dc:"重量/数量"`
	Price  string `json:"price"  dc:"价格"`
}

// EpCategoryInsertFields 新增物品分类字段过滤
type EpCategoryInsertFields struct {
	Title  string `json:"title"  dc:"分类名称"`
	Unit   int    `json:"unit"   dc:"计价类型"`
	Weight string `json:"weight" dc:"重量/数量"`
	Price  string `json:"price"  dc:"价格"`
}

// EpCategoryEditInp 修改/新增物品分类
type EpCategoryEditInp struct {
	entity.EpCategory
}

func (in *EpCategoryEditInp) Filter(ctx context.Context) (err error) {
	// 验证分类名称
	if err := g.Validator().Rules("required").Data(in.Title).Messages("分类名称不能为空").Run(ctx); err != nil {
		return err.Current()
	}

	// 验证计价类型
	if err := g.Validator().Rules("required").Data(in.Unit).Messages("计价类型不能为空").Run(ctx); err != nil {
		return err.Current()
	}
	if err := g.Validator().Rules("in:0,1").Data(in.Unit).Messages("计价类型值不正确").Run(ctx); err != nil {
		return err.Current()
	}

	// 验证重量/数量
	if err := g.Validator().Rules("required").Data(in.Weight).Messages("重量/数量不能为空").Run(ctx); err != nil {
		return err.Current()
	}

	// 验证价格
	if err := g.Validator().Rules("regex:(^[0-9]{1,10}$)|(^[0-9]{1,10}[\\.]{1}[0-9]{1,2}$)").Data(in.Price).Messages("价格最多允许输入10位整数及2位小数").Run(ctx); err != nil {
		return err.Current()
	}

	return
}

type EpCategoryEditModel struct{}

// EpCategoryDeleteInp 删除物品分类
type EpCategoryDeleteInp struct {
	Id interface{} `json:"id" v:"required#ID不能为空" dc:"ID"`
}

func (in *EpCategoryDeleteInp) Filter(ctx context.Context) (err error) {
	return
}

type EpCategoryDeleteModel struct{}

// EpCategoryViewInp 获取指定物品分类信息
type EpCategoryViewInp struct {
	Id int64 `json:"id" v:"required#ID不能为空" dc:"ID"`
}

func (in *EpCategoryViewInp) Filter(ctx context.Context) (err error) {
	return
}

type EpCategoryViewModel struct {
	entity.EpCategory
}

// EpCategoryListInp 获取物品分类列表
type EpCategoryListInp struct {
	form.PageReq
}

func (in *EpCategoryListInp) Filter(ctx context.Context) (err error) {
	return
}

type EpCategoryListModel struct {
	Id     int64  `json:"id"     dc:"ID"`
	Title  string `json:"title"  dc:"分类名称"`
	Unit   int    `json:"unit"   dc:"计价类型"`
	Weight string `json:"weight" dc:"重量/数量"`
	Price  string `json:"price"  dc:"价格"`
}